package com.example.demoreptile;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

import lombok.extern.slf4j.Slf4j;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

@Slf4j
public class TestArticle2 {

    //规定要爬取的网页
    private static String url = "https://www.ibiquges.com/7/7004/";
    private static String common_url = "https://www.ibiquges.com";


    public static void main(String[] args) throws IOException {
        //设置下载文件存放磁盘的位置
        File file = new File("D:\\data\\zt\\");
        //判断文件夹是否存在，不存在就创建
        if (!file.exists()) {
            file.mkdirs();
        }
        Connection conn = Jsoup.connect(url);
        //伪装成为浏览器，有的网站爬取数据会阻止访问，伪装成浏览器可以访问，这里我伪装成Google浏览器
        Document doc = conn.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36").get();
        //寻找名叫panel-body的div，接着再在里面寻找叫list-group.list-charts的ul，再在里面寻找li，再在li里寻找a
        Elements as = doc.select("div#list dl dd a");
        for (Element a : as) {
            //对于每一个元素取出拿到href和小说名字
            String href = a.attr("href");
            String title = a.text();
            //file:表示存放文件的位置
            //href:表示要读取内容的页面
            //title:表示存放文件名称
            save(file, href, title);
        }
    }

    private static void save(File file, String href, String title) throws IOException {
        //在file目录下创建每一个章命名的txt文件
        File f = new File(file, title + ".txt");
        if (!f.exists()) {
            //构建输出流对象，因为小说的内容是字符类型的数据
            Writer out = new FileWriter(f);
            //构建读取页面的url
            // https://www.ibiquges.com/0/8/6850.html
            String url = common_url + href;
            Connection conn = Jsoup.connect(url);
            //伪装成为浏览器
            Document doc = conn.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36").get();
            //获取小说的正文
            String content = doc.select("div#content").html();
            //处理特殊数据
            content = content.replace("一本读|ＷｗんＷ．『yb→du→．co", "");
            content = content.replace("<br>", "");
            content = content.replace("&nbsp;", "");
            out.write(content);
            out.close();
            //需要使用休眠，为了防止网站检测为蓄意攻击，停止我们的IP访问

            int n = (int) (Math.random() * 1000 + 10000);
            log.info("休眠时间：{},文章链接：{},文章名称：{}", n, url, title);
            try {
                Thread.sleep(n);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}
